package com.nmgolden.lanxin.model;

import lombok.Data;

import java.util.List;
import java.util.Map;

/**
 * @author siger
 * @created 2024/5/18
 * @updated 2024/5/18
 */
@Data
public class UpdateUserRequestBody {
    private String staffId;
    /**
     * 人员姓名
     */
    private String name;
    /**
     * 人员使用人员名登录时的人员名，也称staffId。
     * 可由组织在创建时指定，并代表一定含义，比如工号。
     * 创建后不可修改，组织内必须唯一。
     */
    private String loginName;
    /**
     * 人员号
     */
    private String employeeNumber;
    /**
     * 性别：0-保密，1-男，2-女
     */
    private int gender;
    /**
     * 人员头像Id
     */
    private String avatarId;
    /**
     * 电子邮箱地址
     */
    private String email;
    /**
     * 签名
     */
    private String signature;
    /**
     * 民族
     */
    private String nationality;
    /**
     * 出生日期，格式：yyyy-mm-dd
     */
    private String birthdate;
    /**
     * 成员状态, 更新时允许值 ：NORMAL= 1, 已注册; FROZEN = 2, 冻结
     */
    private int status;
    /**
     * 手机号码，组织内必须唯一。
     * 若人员已激活客户端，且登录方式为手机号，则需人员自行修改
     * （此情况下接口返回“人员登录唯一键值不允许修改”错误）
     */
    private MobilePhone mobilePhone;
    /**
     * 附加联系方式
     */
    private List<ExtraPhone> extraPhones;
    /**
     * 人员所在分支
     */
    private List<Department> departments;
    /**
     * 身份证号
     */
    private String idNumber;
    /**
     * 籍贯
     */
    private String nativePlace;
    /**
     * 职务
     */
    private String duties;
    /**
     * 党派
     */
    private String parties;
    /**
     * 自定义扩展属性，k和v都是string，k代表扩展字段id。
     * 所有扩展字段是一个整体，更新时需要整体更新。
     */
    private Map<String, String> extraFieldSet;
    /**
     * 人员标签信息，不填该字段时不修改人员标签，
     * 填空数组时会将人员标签全部删除。
     */
    private List<String> tags;
    /**
     * 人员(办公)地址
     */
    private String address;
    /**
     * 人员外部ID，组织通讯录数据源唯一标识人员的ID。
     * 注意：如果是账号密码方式登录，应该使用loginName字段；
     * 如果是手机号方式登录，又想保留组织内的人员唯一ID，
     * 可以使用该externalId 字段。externalId 和 employeeNumber类似，
     * 用于组织内人员的唯一标识。创建后不可修改，组织内必须唯一。
     */
    private String externalId;
    /**
     * 人员直属领导
     */
    private List<String> leaders;
    /**
     * 人员入职日期，精确到微妙的时间戳
     */
    private long joinDate;


    /**
     * 手机号码
     */
    @Data
    public static class MobilePhone {
        /**
         * 国家码
         */
        private String countryCode;
        /**
         * 手机号
         */
        private String number;
    }

    /**
     * 附加联系方式
     */
    @Data
    public static class ExtraPhone {
        /**
         * 国家码
         */
        private String countryCode;
        /**
         * 电话号码
         */
        private String number;

    }

    /**
     * 人员所在分支
     */
    @Data
    public static class Department {
        /**
         * 分支Id
         */
        private String id;
        /**
         * 人员在分支里的排序。排序不确定时可填0，服务端有效值从1开始
         */
        private int orderNumber;
        /**
         * 分支排序
         */
        private int departmentOrder;
        /**
         * 人员在分支中的职务
         */
        private List<String> extraDuties;

    }
}